from docx import Document
from docx.shared import Pt

# 定义 Word2Vec 模型表格数据
word2vec_data = [
    ["组件", "参数名称", "参数值", "参数说明"],
    ["Word2Vec 模型", "`vector_size`", "300", "词向量的维度，每个词被表示为 300 维向量"],
    ["", "`window`", "5", "当前词与预测词在句子中的最大距离"],
    ["", "`min_count`", "1", "忽略出现次数少于该值的词，设置为 1 表示不忽略任何词"],
    ["", "`workers`", "4", "训练时使用的线程数，可加快训练速度"],
    ["", "`epochs`", "10", "训练的迭代次数，次数越多模型效果可能越好"]
]

# 定义 NRMS 模型表格数据
nrms_data = [
    ["组件", "参数名称", "参数值", "参数说明"],
    ["NRMS 模型", "`num_heads`", "10", "多头注意力机制中的头数，使模型能在不同子空间关注信息"],
    ["", "`embedding_dim`", "300", "词向量的维度，与 `word_vector_size` 相等"],
    ["", "`nn.MultiheadAttention` - `embed_dim`", "300", "输入和输出的特征维度"],
    ["", "`nn.MultiheadAttention` - `num_heads`", "10", "多头注意力的头数"],
    ["", "`nn.Linear` - `in_features`", "300", "线性层输入特征的维度"],
    ["", "`nn.Linear` - `out_features`", "1", "线性层输出特征的维度，用于预测点击概率"]
]

# 定义其他设置表格数据
other_settings_data = [
    ["组件", "参数名称", "参数值", "参数说明"],
    ["优化器（Adam）", "`lr`", "0.0001", "学习率，控制模型参数更新的步长"],
    ["学习率调度器（StepLR）", "`step_size`", "1", "学习率更新的周期，每个 epoch 结束时更新"],
    ["", "`gamma`", "0.9", "学习率衰减的因子，每个周期学习率乘以 0.9"],
    ["损失函数（BCEWithLogitsLoss）", "无（固定特性）", "无", "用于二分类问题，结合 Sigmoid 与二元交叉熵损失"],
    ["训练和评估", "`threshold`", "10", "损失值连续不变的次数阈值，达到该次数学习率衰减"],
    ["", "`epoch`", "1", "训练的轮数，对整个数据集训练的次数"],
    ["评估阈值", "无", "0.5", "判断预测结果是正样本（1）还是负样本（0）的阈值"]
]

# 创建一个新的 Word 文档
document = Document()

# 添加 Word2Vec 模型表格到文档
word2vec_table = document.add_table(rows=len(word2vec_data), cols=len(word2vec_data[0]))

# 填充 Word2Vec 模型表格数据
for i, row_data in enumerate(word2vec_data):
    for j, cell_data in enumerate(row_data):
        cell = word2vec_table.cell(i, j)
        p = cell.paragraphs[0]
        run = p.add_run(cell_data)
        run.font.size = Pt(10)  # 设置字体大小

# 在表格之间添加一个空段落以分隔
document.add_paragraph()

# 添加 NRMS 模型表格到文档
nrms_table = document.add_table(rows=len(nrms_data), cols=len(nrms_data[0]))

# 填充 NRMS 模型表格数据
for i, row_data in enumerate(nrms_data):
    for j, cell_data in enumerate(row_data):
        cell = nrms_table.cell(i, j)
        p = cell.paragraphs[0]
        run = p.add_run(cell_data)
        run.font.size = Pt(10)  # 设置字体大小

# 在表格之间添加一个空段落以分隔
document.add_paragraph()

# 添加其他设置表格到文档
other_settings_table = document.add_table(rows=len(other_settings_data), cols=len(other_settings_data[0]))

# 填充其他设置表格数据
for i, row_data in enumerate(other_settings_data):
    for j, cell_data in enumerate(row_data):
        cell = other_settings_table.cell(i, j)
        p = cell.paragraphs[0]
        run = p.add_run(cell_data)
        run.font.size = Pt(10)  # 设置字体大小

# 保存文档
document.save('model_parameters.docx')
print("Word 文件已保存为 model_parameters.docx")